Modularidad: es la posibilidad de subdividir una aplicación en módulos más pequeños, donde cada uno debe ser tan independiente como sea posible del resto de módulos.
Módulo: podría ser cualquier elemento funcional dentro del sistema, identificable y relevante (Subrutinas, librerías, clases, etc.)
Un sistema diseñado de forma modular es la unión de un conjunto de módulos interconectados, donde cada módulo realizará una tarea bien definida e independiente de las demás.
La POO realiza la modularidad a través del concepto de clase.
Un principio fundamental del diseño modular es:
Acoplamiento: es la interdependencia entre módulos. Debemos buscar que el acoplamiento entre nuestros módulos sea mínimo. Un acoplamiento bajo indica un sistema bien participando y puede obtenerse:
Una forma de debilitar el acoplamiento es haciendo que un módulo oculte su implementación interna y no la haga visible al exterior.
La interface del módulo será la única vía desde el exterior para usar el módulo.
Las ventajas de un bajo acoplamiento son:
Cohesión: es el grado de relación que tienen los elementos internos dentro del módulo. El objetivo es diseñar módulos con una alta cohesión, cuyos elementos estén fuertemente relacionados unos con otros.
Es una manera de estructurar los componentes de un sistema de software de forma modular. El objeto es el módulo que organiza el código.
Los objetos son manipulados por unas funciones (métodos) y se comunican entre sí mediante un protocolo de intercambio de mensajes.
Objeto: módulo autocontenido de datos y operaciones que representa una entidad en el dominio del problema.
La POO divide el proceso de construcción del software en dos fases:
Método: es la implementación de una operación que puede ser requerido a cualquier objeto de la clase.
Los métodos muestran o definen parte del comportamiento de los objetos representados por la clase. El conjunto de métodos constituye la interface del objeto.
Estado: es el valor que tienen los atributos de un objeto en un instante del tiempo concreto.

Atributos: características que definen a la clase.
Para definir una clase utilizaremos la palabra reservada class .
Los nombres de las clases siempre empiezan con mayúscula.
Primero definimos el nivel de privacidad:
Ejemplo:
xxxxxxxxxx71public class Persona { //clase2 private String nombre; //atributos3 private int edad; 4 public float andar (int distancia) { //método5 // Aqui iria la implementación del algoritmo6 }7}Constructor: tiene como objetivo inicializar el objeto cuando se instancia la clase:
Tipos:
Características:
Ejemplo:
xxxxxxxxxx61public class Persona {2 private String nombre;3 public Persona(String n) { //constructor4 nombre = n;5 }6}xxxxxxxxxx11Persona pJuan = new Persona("Juan"); // Se instancia la clase Persona.Los getters son métodos que nos devuelven un valor cuando lo solicitamos a una clase con atributos privados.
Ejemplo:
xxxxxxxxxx31public String getNombre(){2 return nombre;3}Los setters son métodos que sirven para controlar el valor de nuestros atributos.
Ejemplo:
xxxxxxxxxx31public void setNombre(String n) {2 nombre = n;3}Una clase quedará definida de la siguiente manera:
xxxxxxxxxx71public class Persona {2 // atributos3 // constructores (métodos constructores)4 // getters (acceso a propiedades)5 // setters (establecer propiedades)6 // métodos (métodos de servicio)7}Las tarjetas CRC constituyen una técnica para diseñar clases a través de la identificación de colaboraciones y responsabilidades presentes en una clase de objetos.
Son útiles en etapas tempranas de desarrollo, en donde se están identificando las clases en el dominio del problema.
Se componen de las siguientes partes:
Ejemplo:
| - Atender pacientes - Diagnosticar pacientes | - Pacientes - Diagnóstico |
| - Gaurdar datos paciente - Guardar diagnóstico paciente | - Diagnóstico |
| - Gaurdar datos de diagnóstico - Guardar datos de tratamiento | - Tratamiento |
Modelado con objetos: